package com.bawei.wyg.networkmodel.interceptor;

import com.blankj.utilcode.util.LogUtils;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.Iterator;

import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okio.Buffer;

/**
 * 针对接口中token的限定拦截器
 * 像每个接口中添加请求头
 * */
public class Tokeninterceptor implements Interceptor {
    //返回类型为一个response响应
    @Override
    public Response intercept(Chain chain) throws IOException {
        //获取原有request
        Request oldRequest = chain.request();
        //配置添加token的request
        //一个新的request
        Request.Builder builder = new Request.Builder();
        //获取地址
        builder.url(oldRequest.url());
        //添加请求头
        builder.headers(oldRequest.headers());
        //eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJzIiwiZXhwIjozMjQwMzYyMTg4LCJpYXQiOjE2MjAxODEwOTR9.-AvlH5LFtp35Q9T5RIy-cBLPUjKtoR50K7vhNErXlVg
        //在请求头中添加额外的参数
        //使用持久化存储
        //SPStaticUtils.getString("token")
        builder.header("token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIxNjI0MDY0NDc1MTU1IiwiZXhwIjozMjQ4MTI4OTUyLCJpYXQiOjE2MjQwNjQ0NzZ9.VxZANj0dRLi-ompjHBJX-_Eh5QeLoIuaCR4iwmbSkDI");
        //---------------------------
//        RequestBody oldBody = oldRequest.body();
//
//        //获取body中的值
//        //Buffer缓存为解决内存浪费问题，可变，当修改或者添加新的串的时候，不会定义新的而是在原有的字符串上更改
//        Buffer buffer = new Buffer();
//        //把body写到buffer中
//        oldBody.writeTo(buffer);
//        //定义一个string字符串
//        //读到这里
//        String oldJson="";
//        //定义一个byte字节数组
//        //逐个字节读出
//        byte[] buff = new byte[1024];
//        //判断出当前请求出的数据是否走到了最后
//        while(buffer.read(buff)!=-1){
//            //string字符串转换
//            oldJson+=new String(buff);
//        }
//        //关闭buffer
//        buffer.close();
//        oldJson.trim();
//        LogUtils.e("Signinterceptor-oldJson",oldJson);
//        //拼接上字符串
////        oldJson=oldJson.substring(6,oldJson.lastIndexOf("}"));
////        oldJson+="}";
////        LogUtils.e("Signinterceptor-oldJson",oldJson);
//        //每个接口中的参数不同，所以在你拿到的字符串中key值不能确定
//        //单独取出key中的value值
//        String values="";
//        String json="";
//
//        try {
//            //JSONObject 就是json 是一个重要的数据传输对象 用作异步请求返回对象使用
//            //传入原始的json串
//            JSONObject job = new JSONObject(oldJson);
//            //获取json中全部key值
//            //返回的是一个迭代器《String》
//            Iterator<String> it = job.keys();
//            //是否向下
//            //在循环中进行值的拼接
//            while(it.hasNext()){
//                values=job.getString(it.next());
//            }
//            //调用工具类进行排序加密
//            String sign= Md5Utils.creatingSign(values);
//            sign.trim();
//            //往jsonobject中添加sign值
//            job.put("sign",sign);
//            //赋值 对原有参数 赋值 排序 加密 拼接赋值 并转成字符
//            json=job.toString();
//        } catch (JSONException e) {
//            e.printStackTrace();
//        }
//        LogUtils.e("Signinterceptor-json",json);
//        //放入到requestbody中进行请求
//        //类型为application/json
//        RequestBody body = RequestBody.create(MediaType.parse("application/json"), json);
//        //添加到post请求方式
//        builder.post(body);
        builder.post(oldRequest.body());
        //建造完成
        Request request=builder.build();
        //返回response
        return chain.proceed(request);
    }
}
